package org.csc.chaincode;

import org.hyperledger.fabric.shim.ChaincodeBase;
import org.hyperledger.fabric.shim.ChaincodeStub;

import java.util.List;

public abstract class AbstractChainCode extends ChaincodeBase {

    public static final String INIT = "init";
    public static final String QUERY = "query";
    public static final String DEL = "del";
    public static final String PUT = "put";
    public static final String UP = "up";
    public static final String INVOKE_CHAIN_CODE = "invokeChainCode";

    /**
     * 初始化
     * @param stub 请求实体
     * @param args 参数列表
     * @return
     */
    public abstract Response init(ChaincodeStub stub, List<String> args);

    /**
     * 查询
     * @param stub 请求实体
     * @param args 参数列表
     * @return
     */
    public abstract Response query(ChaincodeStub stub, List<String> args);

    /**
     * 删除
     * @param stub 请求实体
     * @param args 参数列表
     * @return
     */
    public abstract Response del(ChaincodeStub stub, List<String> args);

    /**
     * 新增
     * @param stub 请求实体
     * @param args 参数列表
     * @return
     */
    public abstract Response put(ChaincodeStub stub, List<String> args);

    /**
     * 修改
     * @param stub 请求实体
     * @param args 参数列表
     * @return
     */
    public abstract Response up(ChaincodeStub stub, List<String> args);

    /**
     * 调用链码
     * @param chainCodeName 链码名称
     * @param args 参数列表
     * @param channel 通道名称
     * @return
     */
    public abstract Response invokeChainCode(String chainCodeName, List<String> args, String channel);


}
